package jee.boot.module.iexp.task;

import jee.boot.common.basic.BaseConfig;
import jee.boot.common.properties.ProjectConfig;
import jee.boot.common.remote.RemoteEndpoint;
import jee.boot.common.standard.AccountHandler;
import jee.boot.common.standard.AuthorityHandler;
import jee.boot.common.standard.DocumentStorageClient;
import jee.boot.module.iexp.config.ThreadPoolConfig;
import jee.boot.module.iexp.config.ThreadPoolConfigBig;
import jee.boot.module.iexp.service.IexpTaskService;
import jee.boot.module.iexp.task.impl.TaskExecute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 任务监听
 */
@Component
public class TaskListener {
    private Logger logger = LoggerFactory.getLogger(TaskListener.class);
    /**
     * 线程池配置
     */
    @Autowired
    private ThreadPoolConfig threadPoolConfig;
    /**
     * 线程池配置 用于大任务
     */
    @Autowired
    private ThreadPoolConfigBig threadPoolConfigBig;
    /**
     * 任务服务
     */
    @Autowired
    private IexpTaskService iexpTaskService;
    /**
     * 基础配置
     */
    @Autowired
    private BaseConfig baseConfig;

    @Autowired
    private DocumentStorageClient fileService;
    /**
     * 后台任务监听线程
     */
    private Thread taskListenerThread;
    /**
     * 当前登录用户的所有权限信息
     */
    @Autowired
    private AuthorityHandler authorityHandler;
    /**
     * 当前账户信息
     */
    @Autowired
    private AccountHandler accountHandler;
    /**
     * 远程访问
     */
    @Autowired
    private RemoteEndpoint remoteEndpoint;
    /**
     * 项目配置
     */
    @Autowired
    private ProjectConfig projectConfig;

    /**
     * 系统启动后,开始监听数据库任务
     */
    public void listenTask() {
        logger.debug((taskListenerThread == null ? "启动" : "重启") + "监听线程,开始监听任务");
        // 任务线程
        taskListenerThread = new Thread(new TaskExecute(threadPoolConfig, threadPoolConfigBig, iexpTaskService, baseConfig, fileService,authorityHandler,accountHandler,remoteEndpoint,projectConfig), "IexpTaskListenerThread");
        // 守护进程
        taskListenerThread.setDaemon(true);
        // 启动任务监听
        taskListenerThread.start();


    }

    /**
     * 后台任务是否为活跃状态
     *
     * @return
     */
    public boolean isAlive() {
        return taskListenerThread != null && taskListenerThread.isAlive();
    }

    /**
     * 中断等待间隔,启动任务查询
     */
    public void interrupt() {
        if (taskListenerThread != null && taskListenerThread.isAlive()) {
            taskListenerThread.interrupt();
        }
    }
}


